<template>
	<view class="common-content">
		<u-navbar title-color="#fff" back-icon-color="#333333" :is-fixed="true" :is-back="false">
			<view class="common-tabs-box">
				<view class="slot-wrap">
					<view class="slot-wrap-left" @click="back">
						<u-icon name="arrow-left"></u-icon>
					</view>
					<view class="slot-wrap-title">开具处方</view>
					<!-- <text class="common-active-text" @click="usePrescribeHandle">调用处方</text> -->
				</view>
			</view>
		</u-navbar>
		<u-gap height="48" bg-color="#f5f5f5"></u-gap>
		<u-field v-model="name" label="处方名称" placeholder="请填写处方名称" />
		<view class="page-body">
			<view class='wrapper'>
				<view class='toolbar' @tap="format">
					<view :class="formats.bold ? 'ql-active' : ''" class="iconfont icon-zitijiacu" data-name="bold">
					</view>
					<view :class="formats.italic ? 'ql-active' : ''" class="iconfont icon-zitixieti" data-name="italic">
					</view>
					<view :class="formats.underline ? 'ql-active' : ''" class="iconfont icon-zitixiahuaxian"
						data-name="underline"></view>
					<view :class="formats.strike ? 'ql-active' : ''" class="iconfont icon-zitishanchuxian" data-name="strike">
					</view>
					<view :class="formats.align === 'left' ? 'ql-active' : ''" class="iconfont icon-zuoduiqi" data-name="align"
						data-value="left"></view>
					<view :class="formats.align === 'center' ? 'ql-active' : ''" class="iconfont icon-juzhongduiqi"
						data-name="align" data-value="center"></view>
					<view :class="formats.align === 'right' ? 'ql-active' : ''" class="iconfont icon-youduiqi" data-name="align"
						data-value="right"></view>
					<view :class="formats.align === 'justify' ? 'ql-active' : ''" class="iconfont icon-zuoyouduiqi"
						data-name="align" data-value="justify"></view>
					<view :class="formats.lineHeight ? 'ql-active' : ''" class="iconfont icon-line-height" data-name="lineHeight"
						data-value="2"></view>
					<view :class="formats.letterSpacing ? 'ql-active' : ''" class="iconfont icon-Character-Spacing"
						data-name="letterSpacing" data-value="2em"></view>
					<view :class="formats.marginTop ? 'ql-active' : ''" class="iconfont icon-722bianjiqi_duanqianju"
						data-name="marginTop" data-value="20px"></view>
					<view :class="formats.previewarginBottom ? 'ql-active' : ''" class="iconfont icon-723bianjiqi_duanhouju"
						data-name="marginBottom" data-value="20px"></view>
					<view class="iconfont icon-clearedformat" @tap="removeFormat"></view>
					<view :class="formats.fontFamily ? 'ql-active' : ''" class="iconfont icon-font" data-name="fontFamily"
						data-value="Pacifico"></view>
					<view :class="formats.fontSize === '24px' ? 'ql-active' : ''" class="iconfont icon-fontsize"
						data-name="fontSize" data-value="24px"></view>

					<view :class="formats.color === '#0000ff' ? 'ql-active' : ''" class="iconfont icon-text_color"
						data-name="color" data-value="#0000ff"></view>
					<view :class="formats.backgroundColor === '#00ff00' ? 'ql-active' : ''" class="iconfont icon-fontbgcolor"
						data-name="backgroundColor" data-value="#00ff00"></view>

					<view class="iconfont icon-date" @tap="insertDate"></view>
					<view class="iconfont icon--checklist" data-name="list" data-value="check"></view>
					<view :class="formats.list === 'ordered' ? 'ql-active' : ''" class="iconfont icon-youxupailie"
						data-name="list" data-value="ordered"></view>
					<view :class="formats.list === 'bullet' ? 'ql-active' : ''" class="iconfont icon-wuxupailie" data-name="list"
						data-value="bullet"></view>
					<view class="iconfont icon-undo" @tap="undo"></view>
					<view class="iconfont icon-redo" @tap="redo"></view>

					<view class="iconfont icon-outdent" data-name="indent" data-value="-1"></view>
					<view class="iconfont icon-indent" data-name="indent" data-value="+1"></view>
					<view class="iconfont icon-fengexian" @tap="insertDivider"></view>
					<view class="iconfont icon-charutupian" @tap="insertImage"></view>
					<view :class="formats.header === 1 ? 'ql-active' : ''" class="iconfont icon-format-header-1"
						data-name="header" :data-value="1"></view>
					<view :class="formats.script === 'sub' ? 'ql-active' : ''" class="iconfont icon-zitixiabiao"
						data-name="script" data-value="sub"></view>
					<view :class="formats.script === 'super' ? 'ql-active' : ''" class="iconfont icon-zitishangbiao"
						data-name="script" data-value="super"></view>
					<view class="iconfont icon-shanchu" @tap="clear"></view>
					<view :class="formats.direction === 'rtl' ? 'ql-active' : ''" class="iconfont icon-direction-rtl"
						data-name="direction" data-value="rtl"></view>
				</view>

				<editor @input="editText" id="editor" class="ql-container" :placeholder="placeholder" showImgSize showImgToolbar
					showImgResize @statuschange="onStatusChange" :read-only="readOnly" @ready="onEditorReady">
				</editor>
			</view>
			<view class="editor-footer">
				<view class="common-model-button">
					<view :style="cancelStyle" @click="saveHandle">保存</view>
					<view :style="confirmStyle" @click="send">发送处方</view>
				</view>
			</view>
		</view>

	</view>
</template>

<script>

import { lk_expert } from "@/config/myConfig.js";
import storage from "@/utils/storage";
import { TYPES } from "@/js_sdk/tim/tim-js";

let userID = null;
export default {
	props: {
		value: {
			type: String,
			default: ''
		},
		placeholder: {
			type: String,
			default: '开始输入...'
		}
	},
	data() {
		return {
			name: "",
			expertAdvice: "",
			// editor
			readOnly: false,
			formats: {},
			// 取消样式
			cancelStyle: {
				width: "45%",
				height: "80rpx",
				fontSize: "30rpx",
				fontWeight: "bold",
				lineHeight: "80rpx",
				color: "#333",
				backgroundColor: "#fff",
				borderRadius: "40rpx",
				border: "1rpx solid #ECECEC",
				textAlign: "center",
			},
			// 确认样式
			confirmStyle: {
				width: "45%",
				height: "80rpx",
				color: "#fff",
				fontSize: "30rpx",
				fontWeight: "bold",
				lineHeight: "80rpx",
				backgroundColor: "#F4333C",
				borderRadius: "40rpx",
				textAlign: "center",
			},
		}
	},
	onLoad({ user_id }) {
		userID = user_id;
		uni.loadFontFace({
			family: 'Pacifico',
			source: 'url("./Pacifico.ttf")'
		});
	},
	methods: {
		// 返回
		back() {
			uni.navigateBack();
		},
		// 调用处方
		usePrescribeHandle() {
			uni.navigateTo({
				url: "/pages/mine/myConsultation/prescription/index"
			})
		},
		// 保存处方
		saveHandle({ send = false }) {
			if (!this.name || !this.expertAdvice) {
				this.$message.error("请填写处方名称或者处方内容！");
				return;
			}
			uni.request({
				url: lk_expert + "/expert/expert/expertPrescription/save",
				header: {
					"accessToken": storage.getAccessToken()
				},
				method: "POST",
				data: {
					expertAdvice: this.expertAdvice,
					name: this.name,
					file: "",
				},
				success: ({ data: res }) => {
					if (+res.code !== 200) {
						uni.showToast({ title: "保存失败，请重试！", icon: "error" });
						return;
					}

					uni.showToast({ title: "保存成功！", icon: "success" });

					if (send) {
						this.$tim.sendMessage(this.$tim.createCustomMessage({
							to: userID,
							conversationType: TYPES.CONV_C2C,
							payload: {
								data: this.name, // 用于标识该消息是骰子类型消息
								description: this.expertAdvice,// 获取骰子点数
								extension: "",
							},
						})).then(({ data }) => {
							uni.navigateBack();
						}).catch((imError) => {
							console.warn('sendMessage error:', imError);
						});
					}
				}
			})

		},
		// 确认
		send() {
			this.saveHandle({ send: true });
		},
		// 编辑器
		editText(res) {
			this.$emit('editorChange', res.detail.html)
			this.expertAdvice = res.detail.html;
		},
		readOnlyChange() {
			this.readOnly = !this.readOnly
		},
		onEditorReady() {
			uni.createSelectorQuery().select('#editor').context((res) => {
				this.editorCtx = res.context
				this.editorCtx.setContents({
					html: this.value //初始化赋值内容。    
				})
			}).exec()
		},
		undo() {
			this.editorCtx.undo()
		},
		redo() {
			this.editorCtx.redo()
		},
		format(e) {
			let {
				name,
				value
			} = e.target.dataset
			if (!name) return
			// console.log('format', name, value)
			this.editorCtx.format(name, value)
		},
		onStatusChange(e) {
			const formats = e.detail
			this.formats = formats
		},
		insertDivider() {
			this.editorCtx.insertDivider({
				success: function () {
					console.log('insert divider success')
				}
			})
		},
		clear() {
			this.editorCtx.clear({
				success: function (res) {
					console.log("clear success")
				}
			})
		},
		removeFormat() {
			this.editorCtx.removeFormat()
		},
		insertDate() {
			const date = new Date()
			const formatDate = `${date.getFullYear()}/${date.getMonth() + 1}/${date.getDate()}`
			this.editorCtx.insertText({
				text: formatDate
			})
		},
		insertImage() {
			uni.chooseImage({
				count: 1,
				success: (res) => {
					this.editorCtx.insertImage({
						src: res.tempFilePaths[0],
						alt: '图像',
						success: function () {
							console.log('insert image success')
						}
					})
				}
			})
		}
	},
}
</script>

<style lang="scss" scoped>
@import "./index.scss";

.page-body {
	flex: 1;
	// height:calc(100% - 48rpx);
	padding: 30rpx;
	background-color: #fff;
	box-sizing: border-box;
	display: flex;
	flex-direction: column;

	.wrapper {
		flex: 1;
		display: flex;
		flex-direction: column;
	}
}

.toolbar {
	padding-bottom: 20rpx;
	border: 1upx #000 solid;
}

.iconfont {
	display: inline-block;
	padding: 8px 8px;
	width: 24px;
	height: 24px;
	cursor: pointer;
	font-size: 20px;
}

.toolbar {
	box-sizing: border-box;
	border-bottom: 0;
	font-family: 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif;
}

.ql-container {
	box-sizing: border-box;
	padding: 12px 15px;
	width: 100%;
	flex: 1;
	background: #fff;
	font-size: 16px;
	line-height: 1.5;
	border: 1px #000 solid;
}

.ql-active {
	color: #06c;
}

// 尾部
.common-model-button {
	margin-top: 50rpx;
	display: flex;
	align-items: center;
	justify-content: space-between;
}
</style>
